﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Top.Api;
using Top.Api.Request;
using Top.Api.Response;
using WuYuHotel.SQLConn;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Dysmsapi.Model.V20170525;


namespace WuYuHotel.Tools
{
    public class SMS
    {
        static String product = "Dysmsapi";//短信API产品名称
        static String domain = "dysmsapi.aliyuncs.com";//短信API产品域名
        //static String accessKeyId = "LTAINhvgtmYNA0in";//你的accessKeyId
        //static String accessKeySecret = "ybYGoKCavQS8nh9OaBY5KAk8P9czJB";//你的accessKeySecret
        static String accessKeyId = "LTAIpBpHt419ohKI";//你的accessKeyId
        static String accessKeySecret = "j0oWcEN45OzEqBIDDKJZ42Wmp868ps";//你的accessKeySecret

        static public void SMS_Login(string YZM, string telePhone)
        {
            IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            //IAcsClient client = new DefaultAcsClient(profile);
            // SingleSendSmsRequest request = new SingleSendSmsRequest();

            DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            SendSmsRequest request = new SendSmsRequest();
            try
            {
                //必填:待发送手机号。支持以逗号分隔的形式进行批量调用，批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
                request.PhoneNumbers = telePhone;
                //必填:短信签名-可在短信控制台中找到
                request.SignName = "无隅";
                //必填:短信模板-可在短信控制台中找到
                request.TemplateCode = "SMS_166080423";
                //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
                request.TemplateParam = "{\"code\":\"" + YZM + "\"}";
                //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
                request.OutId = "21212121211";
                //请求失败这里会抛ClientException异常
                SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);

                //System.Console.WriteLine(sendSmsResponse.Message);


            }
            catch (ServerException e)
            {
                System.Console.WriteLine("Hello World!");
            }
            catch (ClientException e)
            {
                Dictionary<string, object> datalog = new Dictionary<string, object>();
                datalog.Add("type", int.Parse("10"));
                datalog.Add("OpTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                datalog.Add("OpID", "0");
                datalog.Add("OpLog", "SMS:ClientException-SMS_Login " + e.Message.ToString().Replace("'", "''").Replace(" ", ""));
                BaseDao dao = new BaseDao();
                dao.save("T_LOG", datalog);
            }
        }

        static public void SMS_Order(string roomNum,string RoomType,string EnterTime,string LeaveTime, string telePhone)
        {
            IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            //IAcsClient client = new DefaultAcsClient(profile);
            // SingleSendSmsRequest request = new SingleSendSmsRequest();

            DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            SendSmsRequest request = new SendSmsRequest();
            try
            {
                //必填:待发送手机号。支持以逗号分隔的形式进行批量调用，批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
                request.PhoneNumbers = telePhone;
                //必填:短信签名-可在短信控制台中找到
                request.SignName = "无隅";
                //必填:短信模板-可在短信控制台中找到
                request.TemplateCode = "SMS_166095419";
                //您已预订${roomamount}间${roomtype}，${sdate}入住，${edate}离店，房间保留到18:00
                request.TemplateParam = "{\"roomamount\":\"" + roomNum + "\",\"roomtype\":\"" + RoomType + "\",\"sdate\":\"" + EnterTime + "\",\"edate\":\"" + LeaveTime + "\"}";
                //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
                request.OutId = "21212121211";
                //请求失败这里会抛ClientException异常
                SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);

                //System.Console.WriteLine(sendSmsResponse.Message);
                Dictionary<string, object> datalog = new Dictionary<string, object>();
                datalog.Add("type", int.Parse("10"));
                datalog.Add("OpTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                datalog.Add("OpID", "0");
                datalog.Add("OpLog", "SMS:" + (sendSmsResponse.Code+sendSmsResponse.Message).Replace("'", "''").Replace(" ", ""));
                BaseDao dao = new BaseDao();
                dao.save("T_LOG", datalog);


            }
            catch (ServerException e)
            {
                System.Console.WriteLine("Hello World!");
            }
            catch (ClientException e)
            {
                Dictionary<string, object> datalog = new Dictionary<string, object>();
                datalog.Add("type", int.Parse("10"));
                datalog.Add("OpTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                datalog.Add("OpID", "0");
                datalog.Add("OpLog", "SMS:ClientException-SMS_Order" + e.Message.ToString().Replace("'", "''").Replace(" ", ""));
                BaseDao dao = new BaseDao();
                dao.save("T_LOG", datalog);
            }
            catch(Exception e)
            {
                Dictionary<string, object> datalog = new Dictionary<string, object>();
                datalog.Add("type", int.Parse("10"));
                datalog.Add("OpTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                datalog.Add("OpID", "0");
                datalog.Add("OpLog", "SMS:ClientException-SMS_Order" + e.Message.ToString().Replace("'", "''").Replace(" ", ""));
                BaseDao dao = new BaseDao();
                dao.save("T_LOG", datalog);
            }
        }

        static public void SMS_PayOver(string roomamount,string roomtype,string sdate,string edate, string telePhone)
        {
            IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            //IAcsClient client = new DefaultAcsClient(profile);
            // SingleSendSmsRequest request = new SingleSendSmsRequest();

            DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            SendSmsRequest request = new SendSmsRequest();
            try
            {
                //必填:待发送手机号。支持以逗号分隔的形式进行批量调用，批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
                request.PhoneNumbers = telePhone;
                //必填:短信签名-可在短信控制台中找到
                request.SignName = "无隅";
                //必填:短信模板-可在短信控制台中找到
                request.TemplateCode = "SMS_166095421";
                //您已预订${roomamount}间${roomtype}，${sdate}入住，${edate}离店，房间保留到18:00
                request.TemplateParam = "{\"roomamount\":\"" + roomamount + "\",\"roomtype\":\"" + roomtype + "\",\"sdate\":\"" + sdate + "\",\"edate\":\"" + edate + "\"}";
                //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
                request.OutId = "21212121211";
                //请求失败这里会抛ClientException异常
                SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);

                //System.Console.WriteLine(sendSmsResponse.Message);


            }
            catch (ServerException e)
            {
                System.Console.WriteLine("Hello World!");
            }
            catch (ClientException e)
            {
                Dictionary<string, object> datalog = new Dictionary<string, object>();
                datalog.Add("type", int.Parse("10"));
                datalog.Add("OpTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                datalog.Add("OpID", "0");
                datalog.Add("OpLog", "SMS:ClientException-SMS_PayOver" + e.Message.ToString().Replace("'", "''").Replace(" ", ""));
                BaseDao dao = new BaseDao();
                dao.save("T_LOG", datalog);
            }
        }



    }
}